const { exec } = require('../db/mysql') // 之前导出出去的访问数据库方法
const xss = require('xss') // 引用xss防xss攻击

const getList = async (author, keyword) => { // 创建getList方法来获取博客数据
  let sql = `select * from user` // 创建sql语句记得有些空格也要添加上不然会报错，该语句意思是查询user表的所有字段条件是1=1 因为如果有author或者keyword需要连接上才不会报错。
  if (author) { // 判断传来的author是否有值
    sql += `and author='${author}' ` // 添加到sql语句中，记得后面有空格
  }
  if (keyword) { // 判断传来的keyword是否有值
    sql += `and title like '%${keyword}%' ` // 该语句表示标题中必须包含keyword值
  }
  // sql += `order by createtime desc;` // sql最后我们以createtime倒序排序
  return await exec(sql) // 把sql语句传入exec方法，因为该方法返回的是一个promise所有可以使用await（使用await必须再该函数体前面添加async），await的意思简单来说就是能把异步的变成同步，会等待exec的执行并返回数据，最后将exec返回来的数据再返回出去。

}

const getDetail = async (id) => { // 获取内容
  const sql =`select * from user where id='${id}'`
  const resArr = await exec(sql)
  return resArr[0]
}

const newBlog = async (newblog = {}) => { // 新建博客
  let { title, content, createtime, author } = newblog
  title = xss(title) // xss包裹是为了防止在内容中添加了sql语句
  content = xss(content)
  const sql = `insert into user (title, content, createtime, author) values ('${title}','${content}',${createtime},'${author}')` // 创建sql语句
  const blognewdata = await exec(sql)
  return blognewdata.insertId // 如果新建成功则返回blognewdata的insertId
}

const upDatablog = async (id, updatablog) => { // 更新博客
  const { title, content } = updatablog
  title = xss(title)
  content = xss(content)
  const sql = `update user set title='${title}',content='${content}' where id=${id}`
  const blognewdata = await exec(sql)
  return blognewdata.affectedRows > 0 ? true : false // 如果成功更新则返回blognewdata.affectedRows大于0
}

const delBlog = async (id, author) => { // 删除博客
  const sql = `delete from user where id=${id} and author='${author}'` // 需要在传入author以防误删
  const blognewdata = await exec(sql)
  return blognewdata.affectedRows > 0 ? true : false
}

module.exports = { // 最后将全部访问数据库方法返回出去。大家可以先试试第一个简单的访问数据库能否连接成功再进行后面的编码
  getList,
  getDetail,
  newBlog,
  upDatablog,
  delBlog
}
